package org.wdcode.core.excel;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;

import org.wdcode.common.io.FileUtil;
import org.wdcode.core.params.WdCoreParams;

/**
 * 生成 Excel 接口工厂
 * @see org.wdcode.core.excel.Excel
 * @author WD
 * @since JDK6
 * @version 1.0 2009-7-17
 */
public final class ExcelFactory {
	/**
	 * 创建Excel对象
	 * @param fileName 文件名
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel getExcel(String fileName) {
		return getExcel(FileUtil.getFile(fileName));
	}

	/**
	 * 创建Excel对象 默认使用JXL
	 * @param file 文件
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel getExcel(File file) {
		return getExcel(file, WdCoreParams.getExcelParse());
	}

	/**
	 * 创建Excel对象 默认使用JXL
	 * @param in 流
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel getExcel(InputStream in) {
		return getExcel(in, WdCoreParams.getExcelParse());
	}

	/**
	 * 创建Excel对象
	 * @param fileName 文件路径
	 * @param parse 使用解析Excel的包
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel getExcel(String fileName, ExcelParse parse) {
		return getExcel(FileUtil.getFile(fileName), parse);
	}

	/**
	 * 创建Excel对象
	 * @param file 文件
	 * @param parse 使用解析Excel的包
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel getExcel(File file, ExcelParse parse) {
		return getExcel(FileUtil.getInputStream(file), parse);
	}

	/**
	 * 创建Excel对象
	 * @param in 流
	 * @param parse 使用解析Excel的包
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel getExcel(InputStream in, ExcelParse parse) {
		switch (parse) {
			case ExcelPOI:
				// 使用POI
				return new ExcelPOI(in);
			case ExcelJXL:
				// 使用JXL
				return new ExcelJXL(in);
			default:
				return null;
		}
	}

	/**
	 * 创建Excel文档 并返回着个Excel的Excel对象
	 * @param fileName 文件名
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel createExcel(String fileName) {
		return createExcel(FileUtil.getFile(fileName));
	}

	/**
	 * 创建Excel文档 并返回着个Excel的Excel对象 默认使用JXL
	 * @param file 文件
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel createExcel(File file) {
		return createExcel(file, WdCoreParams.getExcelParse());
	}

	/**
	 * 创建Excel文档 并返回着个Excel的Excel对象 默认使用JXL
	 * @param out 文件流
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel createExcel(OutputStream out) {
		return createExcel(out, WdCoreParams.getExcelParse());
	}

	/**
	 * 创建Excel文档 并返回着个Excel的Excel对象
	 * @param fileName 文件路径
	 * @param parse 使用解析Excel的包
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel createExcel(String fileName, ExcelParse parse) {
		return createExcel(FileUtil.getFile(fileName), parse);
	}

	/**
	 * 创建Excel文档 并返回着个Excel的Excel对象
	 * @param file 文件
	 * @param parse 使用解析Excel的包
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel createExcel(File file, ExcelParse parse) {
		switch (parse) {
			case ExcelPOI:
				// 使用POI
				return new ExcelPOI(file);
			case ExcelJXL:
				// 使用JXL
				return new ExcelJXL(file);
			default:
				return null;
		}
	}

	/**
	 * 创建Excel文档 并返回着个Excel的Excel对象
	 * @param out 文件流
	 * @param parse 使用解析Excel的包
	 * @return Excel对象
	 * @throws CustomException 获得Excel异常
	 */
	public final static Excel createExcel(OutputStream out, ExcelParse parse) {
		switch (parse) {
			case ExcelPOI:
				// 使用POI
				return new ExcelPOI(out);
			case ExcelJXL:
				// 使用JXL
				return new ExcelJXL(out);
			default:
				return null;
		}
	}

	/**
	 * 私有构造
	 */
	private ExcelFactory() {}
}
